import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter_enjoy_plus/constants/index.dart';
import 'package:flutter_enjoy_plus/utils/Toast.dart';
import 'package:geolocator/geolocator.dart';
import 'package:permission_handler/permission_handler.dart';

class LocationList extends StatefulWidget {
  const LocationList({super.key});

  @override
  State<LocationList> createState() => _LocationListState();
}

class _LocationListState extends State<LocationList> {
  // 当前位置
  String currentLocation = '';
  // 周边社区
  List<dynamic> aroundList = [];

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    _getPermission();
  }

  // 动态请求位置
  void _getPermission() async {
    PermissionStatus status = await Permission.location.request();
    // PromptAction.showToast(status.toString());
    if (status.isGranted) {
      // 允许请求位置
      // PromptAction.showToast('允许请求位置');
      _getLocation();
    } else {
      // 拒绝请求位置
      PromptAction.showToast('拒绝请求位置');
    }
  }

  // 获取用户信息
  // web端 -> 获取经纬度(位置信息)是有bug
  // 自己写的时候可能获取不到 -> 没关系 -> 后续可以虚拟出经纬度 ->
  // 核心逻辑: 基于经纬度 -> 获取位置 + 周边社区 (*****)
  void _getLocation() async {
    Position position = await Geolocator.getCurrentPosition();
    // PromptAction.showToast(
    //     '经度: ${position.longitude}, 纬度: ${position.latitude}');
    // 逆地址解析
    _getAddress(position.longitude, position.latitude);
    // 获取周边社区
    _getAround(position.longitude, position.latitude);
  }

  // 逆地址解析: 基于经纬度 -> 地址
  // key:  3d2bff8df9786963476453d13d34f1ea
  _getAddress(double longitude, double latitude) async {
    Dio dio = Dio();
    final res = await dio.get(
        GlobalVariable.GAODE_BASE_URL + HTTP_PATH.GAODE_REGEO,
        queryParameters: {
          'key': GlobalVariable.GAODE_KEY,
          'location': '$longitude,$latitude',
        });
    if (res.data['status'] == '1') {
      // print(res);
      setState(() {
        currentLocation = res.data['regeocode']['formatted_address'];
      });
    }
  }

  // 获取周边社区 基于经纬度
  _getAround(double longitude, double latitude) async {
    Dio dio = Dio();
    final res = await dio.get(
        GlobalVariable.GAODE_BASE_URL + HTTP_PATH.GAODE_AROUND,
        queryParameters: {
          'key': GlobalVariable.GAODE_KEY,
          'location': '$longitude,$latitude',
          'keywords': '附近社区',
          'offset': 10,
        });
    if (res.data['status'] == '1') {
      setState(() {
        aroundList = res.data['pois'];
      });
    }
  }

  // 社区列表
  List<Widget> getAroundList() {
    return aroundList.map((item) {
      return Container(
        color: Colors.white,
        padding: const EdgeInsets.all(10),
        child: Row(
          children: [
            Expanded(child: Text(item['name'])),
            const Row(
              children: [
                Icon(Icons.arrow_forward_ios, size: 16, color: Colors.black),
              ],
            )
          ],
        ),
      );
    }).toList();
  }

  // 重新定位 -> 北京天安门
  resetLocation() {
    // 逆地址解析
    _getAddress(116.397455, 39.909187);
    // 获取周边社区
    _getAround(116.397455, 39.909187);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('选择社区'),
      ),
      body: ListView(
        padding: const EdgeInsets.all(10),
        children: [
          const Row(
            children: [
              Text(
                '当前地址',
                style: TextStyle(color: Colors.grey),
              )
            ],
          ),
          const SizedBox(height: 10),
          Container(
            color: Colors.white,
            padding: const EdgeInsets.all(10),
            child: Row(
              children: [
                Expanded(child: Text(currentLocation)),
                GestureDetector(
                  onTap: () {
                    resetLocation();
                  },
                  child: const Row(
                    children: [
                      Icon(Icons.location_searching_outlined,
                          color: Colors.blue),
                      SizedBox(width: 2),
                      Text(
                        '重新定位',
                        style: TextStyle(color: Colors.blue),
                      ),
                    ],
                  ),
                )
              ],
            ),
          ),
          const SizedBox(height: 10),
          const Row(
            children: [
              Text(
                '附近社区',
                style: TextStyle(color: Colors.grey),
              )
            ],
          ),
          const SizedBox(height: 10),
          ListView(
            shrinkWrap: true,
            physics: const NeverScrollableScrollPhysics(),
            children: getAroundList(),
          )
        ],
      ),
    );
  }
}
